package cn.iocoder.yudao.module.shop.service.staff;

import javax.validation.*;
import cn.iocoder.yudao.module.shop.controller.admin.staff.vo.*;
import cn.iocoder.yudao.module.shop.dal.dataobject.staff.StaffDO;
import cn.iocoder.yudao.module.shop.dal.dataobject.staff.StaffIdentityDO;
import cn.iocoder.yudao.module.shop.dal.dataobject.staff.StaffSalaryDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * 店铺员工 Service 接口
 *
 * @author 芋道源码
 */
public interface StaffService {

    /**
     * 创建店铺员工
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createStaff(@Valid StaffSaveReqVO createReqVO);

    /**
     * 更新店铺员工
     *
     * @param updateReqVO 更新信息
     */
    void updateStaff(@Valid StaffSaveReqVO updateReqVO);

    /**
     * 删除店铺员工
     *
     * @param id 编号
     */
    void deleteStaff(Long id);

    /**
     * 获得店铺员工
     *
     * @param id 编号
     * @return 店铺员工
     */
    StaffDO getStaff(Long id);

    /**
     * 获得店铺员工分页
     *
     * @param pageReqVO 分页查询
     * @return 店铺员工分页
     */
    PageResult<StaffDO> getStaffPage(StaffPageReqVO pageReqVO);

    // ==================== 子表（店铺员工身份） ====================

    /**
     * 获得店铺员工身份分页
     *
     * @param pageReqVO 分页查询
     * @param staffId 员工id
     * @return 店铺员工身份分页
     */
    PageResult<StaffIdentityDO> getStaffIdentityPage(PageParam pageReqVO, Long staffId);

    /**
     * 创建店铺员工身份
     *
     * @param staffIdentity 创建信息
     * @return 编号
     */
    Long createStaffIdentity(@Valid StaffIdentityDO staffIdentity);

    /**
     * 更新店铺员工身份
     *
     * @param staffIdentity 更新信息
     */
    void updateStaffIdentity(@Valid StaffIdentityDO staffIdentity);

    /**
     * 删除店铺员工身份
     *
     * @param id 编号
     */
    void deleteStaffIdentity(Long id);

	/**
	 * 获得店铺员工身份
	 *
	 * @param id 编号
     * @return 店铺员工身份
	 */
    StaffIdentityDO getStaffIdentity(Long id);

    // ==================== 子表（店铺员工工资） ====================

    /**
     * 获得店铺员工工资分页
     *
     * @param pageReqVO 分页查询
     * @param staffId 员工id
     * @return 店铺员工工资分页
     */
    PageResult<StaffSalaryDO> getStaffSalaryPage(PageParam pageReqVO, Long staffId);

    /**
     * 创建店铺员工工资
     *
     * @param staffSalary 创建信息
     * @return 编号
     */
    Long createStaffSalary(@Valid StaffSalaryDO staffSalary);

    /**
     * 更新店铺员工工资
     *
     * @param staffSalary 更新信息
     */
    void updateStaffSalary(@Valid StaffSalaryDO staffSalary);

    /**
     * 删除店铺员工工资
     *
     * @param id 编号
     */
    void deleteStaffSalary(Long id);

	/**
	 * 获得店铺员工工资
	 *
	 * @param id 编号
     * @return 店铺员工工资
	 */
    StaffSalaryDO getStaffSalary(Long id);

}